package MAIN;
//笔试强训第39天
/*选择题*/
/*/etc/resolv.conf 的用途是DNS解析的设置文件，nameserver表示解析域名时使用
该地址指定的主机为域名服务器*/
/*能够ping 通同网段的节点，但是ping不通其他网段的所有节点的最可能的原因是班级网关设置错误
* ping 是TCP/IP协议的一部分，主要是用来检测网络是否通畅，如果要ping其他网段，则需要设置网关*/
/*ping命令是跨操作系统的，windows主机可以ping通Linux主机
* 二层交换机如果出现故障，那么同网段主机则不会ping通*/
/*Dos攻击被称为”拒绝服务攻击“， 其目的是使计算机或网络无法提供正常的服务，最常见的Dos攻击
* 有计算机网络宽带攻击和连通性攻击。 Dos攻击中并不包括侵入目标服务器或目标网络设备
* Dos是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍的耗尽被攻击对象的资源*/
/*IP地址解析称为MAC地址，这个是ARP协议，并且ARP协议是向子网内主机进行广播ARP请求，
* 目标主机收到之后，恢复ARP应答*/
/*产生两次http请求是临时重定向302*/

import javax.sql.rowset.spi.SyncResolver;
import java.util.Scanner;
//编程题
public class Main39 {
    //最长公共子串
    public static int LCS(String m, String n) {
        int len1 = m.length();
        int len2 = n.length();
        int[][] dp = new int[len1 + 1][len2 + 1];
        for (int i = 1; i <= len1; i++) {
            for (int j = 1; j <= len2; j++) {
                if (m.charAt(i - 1) == n.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }
        return dp[len1][len2];
    }

    public static void main1(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            String m = scan.next();
            String n = scan.next();
            System.out.println(LCS(m,n));
        }
    }

    //字符串计数 （将26个字母看成是26进制的数据）
    /*转换成另一种思路：可以将s1 和 s2 堪称是十进制类型的数据*/
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            //接收一组测试用例
            StringBuffer s1 = new StringBuffer(scan.next());
            StringBuffer s2 = new StringBuffer(scan.next());
            int len1 = scan.nextInt();
            int len2 = scan.nextInt();
            //将s1和s2补齐到len2 注：s1之后补到'a', s2补到'z + 1'
            /*因为需要产生26种结果，如果是补到z，此时减去a只有25种结果*/
            for (int i = s1.length(); i < len2; i++) {
                s1.append('a');
            }
            for (int i = s2.length(); i < len2; i++) {
                s2.append('z' + 1);
            }
            //将s1和s2对应位置上的字符相减并保存结果
            int[] arr = new int[len2];
            for (int i = 0; i < len2; i++) {
                arr[i] = s2.charAt(i) - s1.charAt(i);
            }
            //计算结果
            long result = 0;
            for (int i = len1; i <= len2; i++) {
                for (int j = 0; j < i; j++) {
                    result += arr[i] * Math.pow(26, i - j - 1);
                }
            }
            System.out.println((result - 1) % 1000007);
        }
    }
}
